package beans;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;
import org.primefaces.event.CloseEvent;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;

import controlador.Principal;
import model.Curso;
import model.Pregunta;
import model.Respuesta;
import model.Tematica;

public class CargaPregBean implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public List<Curso>	cursos;
	public String cursoSelecId;
	public Curso cursoSelec;
	public List<Tematica> tematicas;
	public Tematica tematicaSelec;
	public String tematicaSelecId;
	public String enunciado;
	public String img;
	public String imgurl;
	public String altenativa1;
	public String altenativa2;
	public String altenativa3;
	public String altenativa4;
	public String altenativa5;
	public boolean value1;
	public boolean value2;
	public boolean value3;
	public boolean value4;
	public boolean value5;
	public boolean facil;
	public boolean medio;
	public boolean dificil;
	public int correcta;
	public String resultado;
	
	//esto se debe cambiar para cada proyecto
	private String destination="C:/Workspaces Adolfo/MyWorkSpace/Sistema_Evaluacion_Aprendizaje/WebContent/img/enunciados/";
	
	
	public CargaPregBean(){
		super();
		cursos = new ArrayList<Curso>();
		cursoSelec = new Curso();
		cursos = Principal.listarCursosAll();		
		tematicas = new ArrayList<Tematica>();
		System.out.println(tematicas.size());
		value1 = true;
		value2 = false;
		value3 = false;
		value4 = false;
		value5 = false;
		altenativa1 = "";
		altenativa2 = "";
		altenativa3 = "";
		altenativa4 = "";
		altenativa5 = "";
		facil = true;
		medio = false;
		dificil = false;
		img = "/img/enunciados/NOIMAGEN.png";
		imgurl = destination + "NOIMAGEN.png";
		resultado = "resultado";
	}
	
	public String getResultado() {
		return resultado;
	}

	public void setResultado(String resultado) {
		this.resultado = resultado;
	}

	public void imprimeAlternativas(){
		System.out.println(altenativa1);
		System.out.println(altenativa2);
		System.out.println(altenativa3);
		System.out.println(altenativa4);
		System.out.println(altenativa5);
	}
	
	 public void savex(ActionEvent actionEvent) {  
		 imprimeAlternativas();
		 Pregunta preg= new Pregunta();
		 Curso curso = cursoSelec;
		 tematicaSelec = Principal.obtenerTematica(tematicaSelecId);
		 Tematica tema = tematicaSelec;
		 preg.setCurso(curso);
		 preg.setTematica(tema);
		 preg.setEnunciadoTexto(enunciado);
		 preg.setFechaPropuesta(new Date());
		 preg.setPreguntaEstado(Principal.getEstadobyId("00004"));
		 preg.setPreguntaId(Principal.generarIDPregunta());
		 preg.setProfesorByPropusoDocenteId(Principal.getProfesor());
		 preg.setEnunciadoImagen(img);
		 System.out.println(enunciado);
		 
		 Principal.guardarPregunta(preg);
		 //String respuestaId, Pregunta pregunta,
		 //String respuestaTexto, String respuestaImg, Set preguntas
		 Respuesta r1 = new Respuesta(Principal.generarIDRespuesta(),preg,altenativa1,null,null);
		 Principal.guardarRespuesta(r1);
		 Respuesta r2 = new Respuesta(Principal.generarIDRespuesta(),preg,altenativa2,null,null);
		 Principal.guardarRespuesta(r2);
		 Respuesta r3 = new Respuesta(Principal.generarIDRespuesta(),preg,altenativa3,null,null);
		 Principal.guardarRespuesta(r3);
		 Respuesta r4 = new Respuesta(Principal.generarIDRespuesta(),preg,altenativa4,null,null);
		 Principal.guardarRespuesta(r4);
		 Respuesta r5 = new Respuesta(Principal.generarIDRespuesta(),preg,altenativa5,null,null);
		 Principal.guardarRespuesta(r5); 
		 
		 
		 if(value1){
			 preg = Principal.ActualizarPregunta(preg.getPreguntaId(), r1);
		 }else if(value2){
			 preg = Principal.ActualizarPregunta(preg.getPreguntaId(), r2);
		 }else if(value3){
			 preg = Principal.ActualizarPregunta(preg.getPreguntaId(), r3);
		 }else if(value4){
			 preg = Principal.ActualizarPregunta(preg.getPreguntaId(), r4);
		 }else if(value5){
			 preg = Principal.ActualizarPregunta(preg.getPreguntaId(), r5);
		 }
		 
		 resultado = "Se cargo con exito la pregunta: " + preg.getPreguntaId() + 
				 "\n******************************************"+
				 "\n  Curso: "+ preg.getCurso().getNombre() +
				 "\n  Tematica: "+ preg.getTematica().getTematicaNombre() +
				 "\n  " +
				 "\n  Enunciado: "+ preg.getEnunciadoTexto() +
				 "\n  " +
				 "\n    Alternativa1: "+ r1.getRespuestaTexto()+
				 "\n    Alternativa2: "+ r2.getRespuestaTexto()+
				 "\n    Alternativa3: "+ r3.getRespuestaTexto()+
				 "\n    Alternativa4: "+ r4.getRespuestaTexto()+
				 "\n    Alternativa5: "+ r5.getRespuestaTexto()+
				 "\n  " +
				 "\n    La respuesta Correxta es: "+ preg.getRespuesta().getRespuestaTexto();
		 
		 System.out.println(resultado);
		 
		 limpiar();
		 
		 /*
	        RequestContext context = RequestContext.getCurrentInstance();  
	        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Pregunta Cargada", "Cod: "+ preg.getPreguntaId()); ;  
	        boolean loggedIn = true;  
	        
	        FacesContext.getCurrentInstance().addMessage(null, msg);  
	        context.addCallbackParam("loggedIn", loggedIn);  
	     */   
	    }  	
	 
	 public void handleClose(CloseEvent event) {
			try {
				FacesContext
						.getCurrentInstance()
						.getExternalContext()
						.redirect(
								"/Sistema_Evaluacion_Aprendizaje/faces/carga_preguntas.xhtml");
			} catch (IOException e) {

				e.printStackTrace();
			}
		}
	 
	 public boolean isFacil() {
		return facil;
	}

	public void setFacil(boolean facil) {
		this.facil = facil;
	}

	public boolean isMedio() {
		return medio;
	}

	public void setMedio(boolean medio) {
		this.medio = medio;
	}

	public boolean isDificil() {
		return dificil;
	}

	public void setDificil(boolean dificil) {
		this.dificil = dificil;
	}

	public void handleFileUpload(FileUploadEvent event) { 
			try{
			System.out.println("entro handleFileUpload");
	        FacesMessage msg = new FacesMessage("Se cargo la imagen", event.getFile().getFileName());  
	        FacesContext.getCurrentInstance().addMessage(null, msg);  
	        copyFile(event.getFile().getFileName(), event.getFile().getInputstream());
	        img = "/img/enunciados/" + event.getFile().getFileName();
	        imgurl = destination + event.getFile().getFileName();
	        System.out.println(imgurl);
			}catch(Exception e){
				FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error de carga", "No se pudo cargar la imagen" + e.getMessage());  
				FacesContext.getCurrentInstance().addMessage(null, msg);  
			}
	 } 
	 
	public void copyFile(String fileName, InputStream in) {
		try {
			// write the inputStream to a FileOutputStream
			OutputStream out = new FileOutputStream(new File(destination
					+ fileName));
			int read = 0;
			byte[] bytes = new byte[1024];

			while ((read = in.read(bytes)) != -1) {
				out.write(bytes, 0, read);
			}

			in.close();
			out.flush();

			System.out.println("New file created!");

		} catch (IOException e) {
			System.out.println(e.getMessage());
		}

	}
	 
	 //valida1
	 public void valida1(){
		 System.out.println("valida 1");
		 imprimeAlternativas();
		 value1=true;
		 value2=false;
		 value3=false;
		 value4=false;
		 value5=false;
	 }
	 
	 public void valida2(){
		 System.out.println("valida 2");
		 imprimeAlternativas();
		 value1=false;
		 value2=true;
		 value3=false;
		 value4=false;
		 value5=false;
	 }
	 
	 public void valida3(){
		 System.out.println("valida 3");
		 imprimeAlternativas();
		 value1=false;
		 value2=false;
		 value3=true;
		 value4=false;
		 value5=false;
	 }
	 
	 public void valida4(){
		 System.out.println("valida 4");
		 imprimeAlternativas();
		 value1=false;
		 value2=false;
		 value3=false;
		 value4=true;
		 value5=false;
	 }
	 
	 public void valida5(){
		 System.out.println("valida 5");
		 imprimeAlternativas();
		 value1=false;
		 value2=false;
		 value3=false;
		 value4=false;
		 value5=true;
	 }
	 
	 public void validafacil(){
		 System.out.println("valida facil");
		 facil = true;
		 medio = false;
		 dificil = false;
	 }
	 
	 public void validamedio(){
		 System.out.println("valida medio");
		 facil = false;
		 medio = true;
		 dificil = false;
	 }
	 
	 public void validadificil(){
		 System.out.println("valida dificil");
		 facil = false;
		 medio = false;
		 dificil = true;
	 }
	
	//muestraTemas
	public void muestraTemas() {
		System.out.println("click cursos");
		System.out.println(cursoSelecId);
		
		
		cursoSelec = Principal.obtenerCurso(cursoSelecId);	
		
		tematicas = new ArrayList<Tematica>();
		
		//+++++++
		for(Object t : cursoSelec.getTematicas()){
			Tematica tx = (Tematica) t;
			tematicas.add(tx);
			System.out.println(tx.getTematicaNombre());
		}		
		
		System.out.println(tematicas.size());
	}
	
	public List<Curso> getCursos() {
		return cursos;
	}

	public void setCursos(List<Curso> cursos) {
		this.cursos = cursos;
	}

	public List<Tematica> getTematicas() {
		return tematicas;
	}

	public void setTematicas(List<Tematica> tematicas) {
		this.tematicas = tematicas;
	}

	public String getEnunciado() {
		return enunciado;
	}

	public void setEnunciado(String enunciado) {
		this.enunciado = enunciado;
	}

	public String getImg() {
		return img;
	}

	public void setImg(String img) {
		this.img = img;
	}

	public String getAltenativa1() {
		return altenativa1;
	}

	public void setAltenativa1(String altenativa1) {
		this.altenativa1 = altenativa1;
	}

	public String getAltenativa2() {
		return altenativa2;
	}

	public void setAltenativa2(String altenativa2) {
		this.altenativa2 = altenativa2;
	}

	public String getAltenativa3() {
		return altenativa3;
	}

	public void setAltenativa3(String altenativa3) {
		this.altenativa3 = altenativa3;
	}

	public String getAltenativa4() {
		return altenativa4;
	}

	public void setAltenativa4(String altenativa4) {
		this.altenativa4 = altenativa4;
	}

	public String getAltenativa5() {
		return altenativa5;
	}

	public void setAltenativa5(String altenativa5) {
		this.altenativa5 = altenativa5;
	}

	public int getCorrecta() {
		return correcta;
	}

	public void setCorrecta(int correcta) {
		this.correcta = correcta;
	}

	public String getCursoSelecId() {
		return cursoSelecId;
	}

	public void setCursoSelecId(String cursoSelecId) {
		this.cursoSelecId = cursoSelecId;
	}

	public String getTematicaSelecId() {
		return tematicaSelecId;
	}

	public void setTematicaSelecId(String tematicaSelecId) {
		this.tematicaSelecId = tematicaSelecId;
	}

	public Curso getCursoSelec() {
		return cursoSelec;
	}

	public void setCursoSelec(Curso cursoSelec) {
		this.cursoSelec = cursoSelec;
	}

	public Tematica getTematicaSelec() {
		return tematicaSelec;
	}

	public void setTematicaSelec(Tematica tematicaSelec) {
		this.tematicaSelec = tematicaSelec;
	}

	public boolean isValue1() {
		return value1;
	}

	public void setValue1(boolean value1) {
		this.value1 = value1;
	}

	public boolean isValue2() {
		return value2;
	}

	public void setValue2(boolean value2) {
		this.value2 = value2;
	}

	public boolean isValue3() {
		return value3;
	}

	public void setValue3(boolean value3) {
		this.value3 = value3;
	}

	public boolean isValue4() {
		return value4;
	}

	public void setValue4(boolean value4) {
		this.value4 = value4;
	}

	public boolean isValue5() {
		return value5;
	}

	public void setValue5(boolean value5) {
		this.value5 = value5;
	}

	public String getImgurl() {
		return imgurl;
	}

	public void setImgurl(String imgurl) {
		this.imgurl = imgurl;
	}	
	
	public void limpiar(){
		cursos = new ArrayList<Curso>();
		cursoSelec = new Curso();
		cursos = Principal.listarCursosAll();		
		tematicas = new ArrayList<Tematica>();
		System.out.println(tematicas.size());
		enunciado = "";
		value1 = true;
		value2 = false;
		value3 = false;
		value4 = false;
		value5 = false;
		altenativa1 = "";
		altenativa2 = "";
		altenativa3 = "";
		altenativa4 = "";
		altenativa5 = "";
		facil = true;
		medio = false;
		dificil = false;
		img = "/img/enunciados/NOIMAGEN.png";
		imgurl = destination + "NOIMAGEN.png";
	}

}
